var nums1 = [1,2,2,1], nums2 = [4,2,2,3];

// var intersect = function(nums1, nums2) {
// 	/*
// 		遍历nums1，嵌套遍历nums2，对比元素是否相等
// 		是：将这个元素从nums2中取出，push到result中，并结束遍历nums2
// 	*/
//     let result = [];
// 	nums1.forEach(item1 => {
// 		for(let i=0,len=nums2.length;i<len;i++){
// 			if(item1 == nums2[i]){
// 				result.push(nums2.splice(i,1));
// 				break;
// 			}
// 		}
// 	})
// 	return result;
// };
// 
// var intersect = function(nums1, nums2) {
// 	/*
// 		如果是排好序的，优化算法如下
// 	*/
//     nums1 = nums1.sort((a,b)=>a-b); // 先排序一下
//     nums2 = nums2.sort((a,b)=>a-b);
//     
//     let result = [];
//     let a=0,b=0;
//     let len1 = nums1.length,len2=nums2.length;
//     while(a<len1&&b<len2){
//         if(nums1[a]==nums2[b]){
//             result.push(nums1[a]);
//             a++;b++;
//         }else if(nums1[a]<nums2[b]){
//             a++;
//         }else{
//             b++
//         }
//     }
// 	return result;
// };

var intersect = function(nums1, nums2) {
	/*
		用一个哈希表存储nums1的数及出现次数
		遍历nums2如果表中有这个数，则push到result，并让表减一（如果是零则删除）
	*/
    let obj = {};
    let result = [];
	nums1.forEach(item=>{
		if(item in obj){
			obj[item]++;
		}else{
			obj[item] = 1;
		}
	})

	nums2.forEach(item=>{
		if(item in obj){
			result.push(item);
			obj[item]>1 ? obj[item] -= 1 : delete obj[item];
		}
	})

	return result;
};
console.log(intersect(nums1, nums2));